let Satck = (function() {
  // 声明一个WeakMap类型的变量items。
  const items = new WeakMap();
  class Satck5 {
    constructor() {
      // 在constructor中，以this（Stack类自己的引用） 为键，把代表栈的数组存入items。
      items.set(this, []);
    }
    push(element) {
      // 从WeakMap中取出值，即以this为键,从items中取值。
      let s = items.get(this); //{3} 
      s.push(element);
    }
    pop() {
      let s = items.get(this);
      let r = s.pop();
      return r;
    }
    // 返回栈顶元素
    peek() {
      let s = items.get(this); //{3} 
      return s[s.length - 1];
    };
    // 栈是否有元素
    isEmpty() {
      let s = items.get(this); //{3} 
      return s.length === 0;
    };
    // 清空栈顶
    clear() {
      items.set(this, []);
    };
    // 返回栈顶的大小
    size() {
      return items.get(this).length
    };
    // 输出
    print() {
      console.log(items.get(this).toString())
    }
  }
  return Satck5
}())
/**
 * 回溯问题
 * 
 */

/**
 * 十进制转二进制问题
 * 思路：要把十进制转化成二进制，我们可以将该十进制数字和2整除（二进制 是满二进一），直到结果是0为止。
 * 
 */
function divideBy2(decNumber) {
  var remStack = new Satck5(),
    rem, binaryString = '';
  while (decNumber > 0) { //{1} 
    rem = Math.floor(decNumber % 2); //{2} 
    remStack.push(rem); //{3} 
    decNumber = Math.floor(decNumber / 2); //{4} 
  }
  while (!remStack.isEmpty()) { //{5} 
    binaryString += remStack.pop().toString();
  }
  return binaryString;
}

/**
 * 
 * 任意制转化问题
 */

/**
 * 
 * 平衡圆括号问题
 */

/**
 * 
 * 汉罗塔问题
 */